package com.wg.springboot.interfaceDemo;
//4种内部类
 class InnerClass {
    private String name;
    public void run(){
        System.out.println("外部访问内部必须要new对象");
    }
    class D{
        private String name;
        public void say(){
            System.out.println("随便用外部类的属性和方法"+name);
            System.out.println("当有同名属性，内部被覆盖，想输出用this"+this.name);
        }
    }
}

//测试在外部类外面创建内部类对象
class test{
    public static void main(String[] args) {
        InnerClass innerClass = new InnerClass();
        InnerClass.D d = innerClass.new D();
//创建静态内部类对象
        U.I   u=new U.I();
     }
}
class C{
     public void run(){
         class D{}//局部类部类存在于方法中 访问权限仅限于方法或作用域内
     }
}

//匿名内部类 接口在类里面 先搞一个执行接口的方法   执行方法不用调接口方法 唯一没有构造方法的内部类。匿名内部类和局部内部类只能访问外部类的final变量 还可以通过继承类来创建一个匿名内部类对象。
class A{
    public static void main(String[] args) {
       driveCar(new B(){
           @Override
           public void drive() {
           }
       });

    }

    public static void driveCar(B b) {
        b.drive();
    }
     interface B{void  drive();}
}

class U{
    static class I{}//静态内部类 外部类加载时只会加载静态域，所以静态内部类不能使用外部类的非静态变量与方法
    enum A{类,里,面,定,义,枚,举}
}

